---
title: Turso & Astro
description: SQLite 파일을 사용하여 로컬로 빌드하고 Turso를 사용하여 전역적으로 배포하세요.
type: backend
service: Turso
stub: false
i18nReady: true
---

import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'

[Turso](https://turso.tech)는 SQLite의 포크인 libSQL을 기반으로 구축된 분산 데이터베이스입니다. 낮은 쿼리 대기 시간에 최적화되어 글로벌 애플리케이션에 적합합니다.

## Astro에서 Turso 초기화

### 전제조건

- [Turso CLI](https://docs.turso.tech/reference/turso-cli) 설치 및 로그인
- 스키마가 포함된 [Turso](https://turso.tech) 데이터베이스
- 귀하의 데이터베이스 URL
- 액세스 토큰

### 환경 변수 구성

다음 명령을 사용하여 데이터베이스 URL을 얻으세요.

```bash
turso db show <database-name> --url
```

데이터베이스에 대한 인증 토큰을 만듭니다.

```bash
turso db tokens create <database-name>
```

위 두 명령의 출력을 프로젝트 루트의 `.env` 파일에 추가하세요. 이 파일이 존재하지 않으면 파일을 만드세요.

```ini title=".env"
TURSO_DATABASE_URL=libsql://...
TURSO_AUTH_TOKEN=
```

:::caution
이러한 비공개 [환경 변수](/ko/guides/environment-variables/)를 생성할 때 `PUBLIC_` 접두사를 사용하지 마세요. 그러면 클라이언트에 이러한 값이 노출됩니다.
:::

### LibSQL 클라이언트 설치

Turso를 Astro에 연결하려면 `@libsql/client`를 설치하세요.

<PackageManagerTabs>
  <Fragment slot="npm">
    ```shell
    npm install @libsql/client
    ```
  </Fragment>
  <Fragment slot="pnpm">
    ```shell
    pnpm add @libsql/client
    ```
  </Fragment>
  <Fragment slot="yarn">
    ```shell
    yarn add @libsql/client
    ```
  </Fragment>
</PackageManagerTabs>

### 새 클라이언트 초기화

`src` 폴더에 `turso.ts` 파일을 생성하고 `createClient`를 호출하여 `TURSO_DATABASE_URL` 및 `TURSO_AUTH_TOKEN`을 전달합니다.

```ts title="src/turso.ts"
import { createClient } from "@libsql/client/web";

export const turso = createClient({
  url: import.meta.env.TURSO_DATABASE_URL,
  authToken: import.meta.env.TURSO_AUTH_TOKEN,
});
```

## 데이터베이스 쿼리

데이터베이스의 정보에 액세스하려면 `turso`를 가져오고 `.astro` 컴포넌트에서 [SQL 쿼리를 실행](https://docs.turso.tech/libsql/client-access/javascript-typescript-sdk#execute-a-single-statement)하세요.

다음 예시는 테이블에서 모든 `posts`를 가져온 다음 `<BlogIndex />` 컴포넌트에 제목 목록을 표시합니다.

```astro title="src/components/BlogIndex.astro"
---
import { turso } from '../turso'

const { rows } = await turso.execute('SELECT * FROM posts')
---

<ul>
  {rows.map((post) => (
    <li>{post.title}</li>
  ))}
</ul>
```

### SQL Placeholders

`execute()` 메서드는 객체를 사용하여 `slug` 또는 페이지네이션과 같은 [변수를 SQL 문에 전달](https://docs.turso.tech/libsql/client-access/javascript-typescript-sdk#positional-placeholders)할 수 있습니다.

다음 예시는 `WHERE`를 사용하여 `Astro.params`에서 검색된 값이 `slug`인 `posts` 테이블의 항목을 가져온 다음 게시물의 제목을 표시합니다.

```astro title="src/pages/index.astro"
---
import { turso } from '../turso'

const { slug } = Astro.params

const { rows } = await turso.execute({
  sql: 'SELECT * FROM posts WHERE slug = ?',
  args: [slug!]
})
---

<h1>{rows[0].title}</h1>
```

## Turso 자료

- [Turso 문서](https://docs.turso.tech)
- [Turso GitHub](https://github.com/tursodatabase)
- [Turso를 사용하여 서버 측 렌더링된 Astro 블로그 콘텐츠 제공](https://blog.turso.tech/using-turso-to-serve-a-server-side-rendered-astro-blogs-content-58caa6188bd5)
